using System;
using System.Collections;
using System.Collections.Generic;

namespace Bridges.Model
{
	/// <summary>
	/// Endereco
	/// </summary>
	public class Endereco
	{
		#region Member Variables
		private int _codEndereco;
		private String _logradouro;
		private int _numeroEndereco;
		private String _complemento;
		private String _cep;
		private String _bairro;
		private String _tipoendereco;
		private Cidade _cidade;
        private Estado _estado;
        private Pais _pais;
        private String _observacao;
		#endregion

		#region Constructors

		public Endereco() { }

		public Endereco( String logradouro, int numeroendereco, String complemento, String cep, String bairro, String tipoendereco, Cidade cidade)
		{
			this._logradouro = logradouro;
			this._numeroEndereco = numeroendereco;
			this._complemento = complemento;
			this._cep = cep;
			this._bairro = bairro;
			this._tipoendereco = tipoendereco;
			this._cidade = cidade;
		}

		#endregion

		#region Public Properties

        public Pais Pais
        {
            get { return _pais; }
            set { _pais = value; }
        }

        public Estado Estado
        {
            get { return _estado; }
            set { _estado = value; }
        }

		public int CodEndereco
		{
			get {return _codEndereco;}
			set {_codEndereco = value;}
		}

        public String Observacao
        {
            get { return _observacao; }
            set { _observacao = value; }
        }

		public String Logradouro
		{
			get { return _logradouro; }
			set
			{
				if ( value != null && value.Length > 100)
					throw new ArgumentOutOfRangeException("Valor inv?lido para Logradouro", value, value.ToString());
				_logradouro = value;
			}
		}

		public int NumeroEndereco
		{
			get { return _numeroEndereco; }
			set { _numeroEndereco = value; }
		}

		public String Complemento
		{
			get { return _complemento; }
			set { _complemento = value; }
		}

		public String Cep
		{
			get { return _cep; }
			set { _cep = value; }
		}

		public String Bairro
		{
			get { return _bairro; }
			set
			{
				if ( value != null && value.Length > 50)
					throw new ArgumentOutOfRangeException("Valor inv?lido para Bairro", value, value.ToString());
				_bairro = value;
			}
		}

		public String TipoEndereco
		{
			get { return _tipoendereco; }
			set
			{
				if ( value != null && value.Length > 45)
					throw new ArgumentOutOfRangeException("Valor inv?lido para Tipoendereco", value, value.ToString());
				_tipoendereco = value;
			}
		}

		public Cidade Cidade
		{
			get { return _cidade; }
			set { _cidade = value; }
		}

		

		#endregion
		
	}

}
